home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / lists / gem / l_1199 / 1067 < prev    next >
Internet Message Format  |  1994-08-27  |  3KB

  1. Date: Wed, 27 Jul 94 09:44:34 BST
  2. From: d.oakley.kid0111@oasis.icl.co.uk
  3. Subject: Raster scrolling background windows
  4. To: gem-list@world.std.com
  5. Precedence: bulk
  6.  
  7. Hi!
  8.  
  9. I've managed the above in my StormTracker program. I'm not at an
  10. Atari or near Atari manuals, so the following example is in a
  11. mix of C and pseudo-code:
  12.  
  13. typedef struct realscreen {
  14.       int rx,ry;     // where we are on the big screen
  15.                      // ie. the whole document
  16.       int window;    // the window we're mapping it into
  17. }
  18.  
  19. realscreen rs;
  20.  
  21. main()
  22. {
  23.       ...
  24.       scroll_down(16);         // user pressed the DOWN button
  25.       ...
  26. }
  27.  
  28. void scroll_down(int dist)
  29. {
  30.       GRECT r;
  31.       rs.rx +=dist;            // update our position in the document
  32.  
  33.       get_first_rectangle(rs.window,&r);
  34.  
  35.       while(r.w!=0 && r.h!=0)  // we have a rectangle to update
  36.       {
  37.            scroll_block(r.x,r.y+dist,r.w,r.h-dist,dist);
  38.                                // ^^ a bit of code which copies the given
  39.                                //    rectangle up dist pixels
  40.  
  41.            draw_window(r.x,r.y+r.h-dist,r.w,dist);
  42.                                // ^^ redraw the bit of window which
  43.                                //    has just become visible
  44.  
  45.            get_next_rectangle(rs.window,&r);
  46.       }
  47. }
  48.  
  49. Right. This is what it does.
  50.  
  51. You treat each bit of window you need to redraw as the extent of the 
  52. window. So if before the scroll your window looks like:
  53.  
  54.       +---------------+
  55.       | the cow jumped|                                 |
  56.       | and yelled "He| |                               |
  57.       | I've no idea w| | we can copy this to here:     |
  58.       |funny that, I n| |
  59.       +---------------+
  60.  
  61.  and we scroll this bit of window up it becomes
  62.  
  63.       +---------------+
  64.       | and yelled "He|
  65.       | I've no idea w|
  66.       |funny that, I n|
  67.       |funny that, I n| <- this line now needs redrawing
  68.       +---------------+
  69.  and then
  70.  
  71.       +---------------+
  72.       | and yelled "He|
  73.       | I've no idea w|
  74.       |funny that, I n|
  75.       |thought that co|
  76.       +---------------+
  77.  
  78. As long as you have written a chunk of code which can handle redrawing any 
  79. bit of screen (you should have that), scrolling background windows is 
  80. simply a case of calculating which bit moves for each redraw rectangle, 
  81. moving it can redrawing what is left.
  82.  
  83. Hope that helps
  84.  
  85. David
  86. ------------------------------------------------------------------
  87. David Oakley, Sponsored Student, ICL MSPL, Stoke-on-Trent, England
  88. ------------------------------------------------------------------
  89.  
  90.